TG Bot接入OpenAI API,用命令行也能与AI对话

浏览:1658次阅读
没有评论

前言

我所遇到的问题相信大家也都遇到了,有时候与 chatGPT 对话时经常出现 1 小时内请求过多的情况,心情不好就不跟你聊了。

于是

我为了测试 text 模型到底怎么样,有没有大家说的那么神奇,我与 GPT 的交互陷入了一个死循环。原因是我想让它帮我写用 tg bot 接入 OpenAI,然后用和 bot 交互,你猜怎么着,GPT 模型不支持 API 调用,目前只能用 post 请求,这就把 GPT 给难坏了,4 小时这代码也没写明白,一个劲儿说我请求次数太多!最后我给它一个 60 分吧,感觉嗷,用 AI 取代程序员还有待时日。

TG Bot接入OpenAI API,用命令行也能与AI对话插图

本文内容一共分为两个部分,第一部分是在一台 linux 服务器,直接用 python 命令行的方式与最新的模型 Davinci-003 交互;第二部分是与已经接入 API 的 telegram bot 交互,实现的方法也很简单,主要命令和代码如下:

第一部分

首先我们需要在服务器上安装 pip 和 openai 库:

apt update
apt install pip vim -y
pip install openai

然后,需要申请 OpenAI 的 api,在这里申请:https://platform.openai.com/account/api-keys
顺便说一下,申请 api 需要先绑定信用卡,不支持中国卡,哇咔咔!推荐使用:https://iweec.com/709.html
绑卡后两个月送 $18,随便造;参考费用是 750 个单词算 1000tokens,费用 $0.02。为了测试不超标,我把消费限制在每月最多 $1。设置限额的方法就是在 https://platform.openai.com/account/billing/limits 看条件设置吧!

然后,就是在 vps 上创建 main.py, 内容如下:

import openai

openai.api_key = "这里是你申请到的 API-key"

def chat_with_gpt3(prompt):
    response = openai.Completion.create(
        engine="text-davinci-003",
        prompt=prompt,
        max_tokens=104,
        n=1,
        stop=None,
        temperature=0.5,
    )
    message = response.choices[0].text
    return message

def main():
    while True:
        message = input("You:")
        response_message = chat_with_gpt3(message)
        print(f"Bot: {response_message}")

if __name__ == "__main__":
    main()

最后执行 python3 chat.py,即可实现交互问答:
TG Bot接入OpenAI API,用命令行也能与AI对话插图1

第二部分

首先还是要申请 OpenAI 的 apikey,方法上面说了;
然后这个 vps 也必须是海外的嗷,因为我们要用 bot;

apt update
apt install pip vim -y
pip install openai aiogram 

下一步就是新建 main.py,内容如下:

import openai
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

token = '这里是你的 bot token'
openai.api_key = '这里是你的 api-key'

bot = Bot(token)
dp = Dispatcher(bot)

@dp.message_handler()
async def send(message : types.Message):
    response = openai.Completion.create(
    model="text-davinci-003",
    prompt=message.text,
    temperature=0.9,
    max_tokens=1000,
    top_p=1.0,
    frequency_penalty=0.0,
    presence_penalty=0.6,
    stop=["You:"]
)
    await message.answer(response['choices'][0]['text'])

executor.start_polling(dp, skip_updates=True)

最后,就是执行 python3 main.py,提示:Updates were skipped successfully. 就可以到你的 bot 当中,跟他聊一下!

小结

切记:不要暴露 API 和 token!!

我在上面用例当中引用的 text-davinci-003 模型,虽然快,但是有点傻:

正文完
 0